#include "main.h"
#include <stdio.h>
int ListInitiate(LNode **head)/*初始化*/ {
    LNode *l;
    l =(LNode*)malloc(sizeof(LNode));
    if(l == NULL)
    { printf("创建失败");return 1;}
    l->next = NULL;
    *head = l;
    return 0;
}
int ListLength(LNode *head){
	
    LNode *p=head;

	int i=0;
	while(p->next!=NULL){	
		p=p->next;
		i++;
	} 
	return i;
}
int ListInsert(LNode *head, int i, DataType x){
	LNode *p=head;
	LNode *s;
	int j=-1;
	p=head;
	while(p&&j<i-1){
		p=p->next;
		j++;
	} 
	if(j!=i-1) {
		return 0;
	}
    s=(LNode *)malloc(sizeof(LNode));
	s->data=x;
	s->next=p->next;
	p->next=s;
	return 1;
	}
int ListDelete(LNode *head, int i, DataType *x){
	LNode *p=head;
	int j=-1;
	while (p->next&&j<i-1){
		p=p->next;j++;
	}
	if(!(p->next)||j>i-1)
	return 0;
	LNode *q =p->next;
	p->next=q->next;
	*x=q->data;
	free(q);
	return 1; 
}	
int ListGet(LNode *head, int i, DataType *x){
	LNode *p;
	p=head->next;
	int j=0;
	while (p&&j<i){
		p=p->next;j++;
	}
	if(!p||j>i){
		return 0;	
	}
	*x=p->data;
	return 1;
}
int Destroy(LNode **head)
{   LNode *p;
    while (*head){
        p=(*head)->next;
        free(*head);
        *head=p;
    }
    if(*head!=NULL)
        return 1;
    return 0;
}
int main(){
	LNode *head;
	int i,x;
	ListInitiate(&head);
	for(i=0;i<10;i++){
		if(ListInsert(head,i,i+1)==0){
			printf("error3\n"); 
			return ;
		} 
	} 
	if(ListDelete(head,4,&x)==0){
		printf("error1\n");
		return ; 
	}
	for(i=0;i<ListLength(head);i++){
		if(ListGet(head,i,&x)==0){
			printf("error2\n");
			return ;
		}
		else printf("%d   ",x);
	}
	Destroy(&head);
}